package homework04;

/*编写10个线程，第一个线程从1加到10，第二个线程从11加到20,
…第十个线程从91加到100，最后再把10个线程结果相加。*/
public class Thread04 {
    public static int sum = 0;//创建类内部的线程共享数据

    public static void main(String[] args) {
        /*用于创建并开启十个线程，并将十个任务封装到是个线程的内部*/
        for (int i = 0; i < 10; ++i) {
            MyThread t = new MyThread();
            t.init(i);
            Thread th = new Thread(t);
            th.start();

        }

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
        }
        System.out.println("十个线程最终相加的结果是：->" + sum);
    }
}


class MyThread implements Runnable {
    private int num;//定义一个可以记录每个线程起始累加数的变量
    private static Object obj = new Object();//定义一个锁，用于将来十个现成完成共享数据的累加时的互斥

    public void init(int num) {//用来初始化每个线程初始累加数
        this.num = num;
    }

    public void run() {//重写run方法
        int count = 0;//记录每个线程累加结果的变量
        for (int i = num * 10 + 1; i < num * 10 + 11; ++i) count += i;//每个线程累加
        synchronized (obj) {
            System.out.println(Thread.currentThread().getName() + "累加结果........" + count);
            Thread04.sum += count;//共享数据的累加
        }
    }

}

